/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Model;

import Controller.Calculadora;
import java.io.PrintWriter;
import java.util.ArrayList;

/**
 *
 * @author Martin Kanayet
 */
public class twoWays {

    private static int i;
    private static String estadisticaACalcular;
    private static int j;
    private static int k; //Numero de datos en una celda;
    private static double granMedia;

    public static String getEstadisticaACalcular() {
        return estadisticaACalcular;
    }

    public static void setEstadisticaACalcular(String estadisticaACalcular) {
        twoWays.estadisticaACalcular = estadisticaACalcular;
    }
    private static double alpha;
    private static double beta;
    private static int mPiloto = 40; //Número inicial de simulaciones
    private static int mEstimado; //Número estimado de simulaciones para encontrar solucion
    private static double error;
    private static double significancia;
    private static double tao;
    private static double deltaTao;
    private static double[][] matrix;
    private static Celdam[][] matriz;
    private static double varianza;
    private static double desvEstandar;
    private static double simetria;
    private static double apuntamiento;
    private static double pPiloto;
    private static double registrosMax;
    private static ArrayList<Double> listaTaos = new ArrayList<Double>();
    private static ArrayList<Double> listaBetas = new ArrayList<Double>();
    private static ArrayList<Double> pruebasPilotoK = new ArrayList<Double>();
    private static String rutaSalida;
    private static String archivo="";
    private static PrintWriter pw;

    public static ArrayList<Double> getListaBetas() {
        return listaBetas;
    }

    public static String getArchivo() {
        return archivo;
    }

    public static void setArchivo(String archivo) {
        twoWays.archivo = archivo;
    }

    public static PrintWriter getPw() {
        return pw;
    }

    public static void setPw(PrintWriter pw) {
        twoWays.pw = pw;
    }

    public static String getRutaSalida() {
        return rutaSalida;
    }

    public static void setRutaSalida(String rutaSalida) {
        twoWays.rutaSalida = rutaSalida;
    }

    public static double getApuntamiento() {
        return apuntamiento;
    }

    public static void setApuntamiento(double apuntamiento) {
        twoWays.apuntamiento = apuntamiento;
    }

    public static double getDesvEstandar() {
        return desvEstandar;
    }

    public static void setDesvEstandar(double desvEstandar) {
        twoWays.desvEstandar = desvEstandar;
    }

    public static double getpPiloto() {
        return pPiloto;
    }

    public static void setpPiloto(double pPiloto) {
        twoWays.pPiloto = pPiloto;
    }

    public static ArrayList<Double> getPruebasPilotoK() {
        return pruebasPilotoK;
    }

    public static void setPruebasPilotoK(ArrayList<Double> pruebasPilotoK) {
        twoWays.pruebasPilotoK = pruebasPilotoK;
    }

    public static double getRegistrosMax() {
        return registrosMax;
    }

    public static void setRegistrosMax(double registrosMax) {
        twoWays.registrosMax = registrosMax;
    }

    public static double getSimetria() {
        return simetria;
    }

    public static void setSimetria(double simetria) {
        twoWays.simetria = simetria;
    }

    
    public static void setListaBetas(ArrayList<Double> listaBetas) {
        twoWays.listaBetas = listaBetas;
    }

    public static ArrayList<Double> getListaTaos() {
        return listaTaos;
    }

    public static void setListaTaos(ArrayList<Double> listaTaos) {
        twoWays.listaTaos = listaTaos;
    }

    //Falta el arrayList por celda :P (Ese no es atributo)

    public static double getAlpha() {
        return alpha;
    }

    public static double getVarianza() {
        return varianza;
    }

    public static void setVarianza(double varianza) {
        twoWays.varianza = varianza;
    }

    public static void setAlpha(double alpha) {
        twoWays.alpha = alpha;
    }

    public static double getBeta() {
        return beta;
    }

    public static void setBeta(double beta) {
        twoWays.beta = beta;
    }

    public static double getDeltaTao() {
        return deltaTao;
    }

    public static void setDeltaTao(double deltaTao) {
        twoWays.deltaTao = deltaTao;
    }

    public static double getError() {
        return error;
    }

    public static void setError(double error) {
        twoWays.error = error;
    }

    public static double getGranMedia() {
        return granMedia;
    }

    public static void setGranMedia(double granMedia) {
        twoWays.granMedia = granMedia;
    }

    public static int getI() {
        return i;
    }

    public static void setI(int i) {
        twoWays.i = i;
    }

    public static int getJ() {
        return j;
    }

    public static void setJ(int j) {
        twoWays.j = j;
    }

    public static int getK() {
        return k;
    }

    public static void setK(int k) {
        twoWays.k = k;
    }

    public static int getmEstimado() {
        return mEstimado;
    }

    public static void setmEstimado(int mEstimado) {
        twoWays.mEstimado = mEstimado;
    }

    public static int getmPiloto() {
        return mPiloto;
    }

    public static void setmPiloto(int mPiloto) {
        twoWays.mPiloto = mPiloto;
    }

    public static double[][] getMatrix() {
        return matrix;
    }

    public static void setMatrix(double[][] matrix) {
        twoWays.matrix = matrix;
    }

    public static double getSignificancia() {
        return significancia;
    }

    public static void setSignificancia(double significancia) {
        twoWays.significancia = significancia;
    }

    public static double getTao() {
        return tao;
    }

    public static Celdam[][] getMatriz() {
        return matriz;
    }

    public static void setMatriz(Celdam[][] matriz) {
        twoWays.matriz = matriz;
    }

    public static void setTao(double tao) {
        twoWays.tao = tao;
    }

    public twoWays(int r, int c) {
        i = r;
        j = c;
        setup();
    }
    
    public void calcularMomentos(Celdam muestra[][]) {
	int i,contador=0;
	// calcular la media
	double m1 = 0;
	double m2 = 0;
	double m3 = 0;
	double m4 = 0;

	m1=granMedia;

	// varianza
	for (i = 0; i < muestra.length; i++) {
            for (int j = 0; j < matriz[0].length; j++) {
                for (int k = 0; k < matriz[i][j].getDatos(); k++) {
                    contador = contador + 1;
                    m2 = m2 + Math.pow((matriz[i][j].getValores().get(k) - m1), 2);
                }
            }
        }
        m2 = m2 / contador;
	
	varianza = m2;
	desvEstandar = Math.sqrt(varianza);
	// momento3
	for (i = 0; i < muestra.length; i++) {
            for (int j = 0; j < matriz[0].length; j++) {
                for (int k = 0; k < matriz[i][j].getDatos(); k++) {
                    contador = contador + 1;
                    m3 += Math.pow(muestra[i][j].getValores().get(k) - m1, 3);
                }
            }
        }
	m3 = m3 / (contador * Math.pow(desvEstandar, 3));
	simetria = m3;
	// momento4
	for (i = 0; i < muestra.length; i++) {
            for (int j = 0; j < matriz[0].length; j++) {
                for (int k = 0; k < matriz[i][j].getDatos(); k++) {
                    contador = contador + 1;                    
                    m4 += Math.pow(muestra[i][j].getValores().get(k) - m1, 4);
                }
            }
        }
        m4 = m4 / (contador * Math.pow(desvEstandar, 4));
	apuntamiento = m4;
    }
    
    //Ajuste de Lambdas
    
    
// prueba 

    public static void setup() {
        matrix = new double[i][j];
        matrix[0][0] = 2.24;
        System.out.println(matrix[0][0]);
    }
}
